package control;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.HabilitacaoService;
import utils.Constantes;
import utils.Utils;

import model.Habilitacao;
import model.Item;


public class ItemControl extends GenericControl implements IControl{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void executar(HttpServletRequest request,
			HttpServletResponse response) {
		this.setRequest(request);
		this.setResponse(response);
		String method = request.getParameter("acao");
		if (method.equals("lancar")) {
			this.lancar();
		} else if (method.equals("remover")) {
			this.remover();
		} else if (method.equals("removerTudo")) {
			this.removerTudo();
		} else if (method.equals("atualizar")) {
			this.atualizar();
		} else if (method.equals("gerarpdf")) {
			this.gerarpdf();
		}
		Dispatcher.showScreen(this.getRequest(), this.getResponse());
	}

	private void atualizar() {
		// TODO Auto-generated method stub
		
	}

	private void gerarpdf() {
		// TODO Auto-generated method stub
		
	}

	private void removerTudo() {
		this.setAtributoSession(Constantes.ITEMS_SESSION, null);
		// TODO Auto-generated method stub
		
	}

	private void remover() {
		Item item = this.loadActionToModel();
		Habilitacao habilitacao = item.getHabilitacao();
		
		@SuppressWarnings("unchecked")
		ArrayList<Item> items_Session = (ArrayList<Item>) this.getAtributoSession(Constantes.ITEMS_SESSION);
		
		for(int i = 0; i < items_Session.size();i++){
			 if (Utils.contains(items_Session, habilitacao)){
				 items_Session.remove(i);
				 break;
			 }
		}
		
		this.setAtributoSession(Constantes.ITEMS_SESSION, items_Session);
		// TODO Auto-generated method stub
		
	}

	private void lancar() {
		Item item = this.loadActionToModel();
		
			
		@SuppressWarnings("unchecked")
		ArrayList<Item> items_Session = (ArrayList<Item>) this.getAtributoSession(Constantes.ITEMS_SESSION);
		if (items_Session==null) 
			items_Session = new ArrayList<Item>();
			 
		//Adicionar o mesmo habilitacao
		for(int i = 0; i < items_Session.size();i++){
			 if (Utils.contains(items_Session, item.getHabilitacao())){
				 item = items_Session.get(i);
				 item.setQuantidade(item.getQuantidade()+1);
				 items_Session.remove(i);
			 }
		}
		items_Session.add(item);
				 
		this.setAtributoSession(Constantes.ITEMS_SESSION, items_Session);
			 ////Dispatcher.showScreen(request, response);
		
	}

	private Item loadActionToModel() {		
		HttpServletRequest request = this.getRequest();
		Item item = new Item();
		
		Habilitacao habilitacao = null;
		
		if (!Utils.isBlank(request.getParameter(Constantes.IDHABILITACAO))){
			habilitacao = new Habilitacao();
			habilitacao.setId(Integer.valueOf(request.getParameter(Constantes.IDHABILITACAO)));
			HabilitacaoService habilitacaoService = new HabilitacaoService();
			habilitacao = habilitacaoService.select(habilitacao);
		}
		item.setHabilitacao(habilitacao);
		
		if (!Utils.isBlank(request.getParameter(Constantes.QUANTIDADE))){
			item.setQuantidade(Integer.valueOf(request.getParameter(Constantes.QUANTIDADE)));
		} else
			item.setQuantidade(1);
		
		
		
		
		
//		Usuario usuario= new Usuario();
//		if (!Utils.isBlank(request.getParameter(Constantes.IDFUNCIONARIO))){
//			usuario.setId(Integer.valueOf(request.getParameter(Constantes.IDFUNCIONARIO)));
//			usuario.setNome(request.getParameter(Constantes.NOME));
//		}
//		habilitacao.setUsuario(usuario);
		
//		Servico servico = new Servico();
//		if (!Utils.isBlank(request.getParameter(Constantes.IDSERVICO)))
//			servico.setId(Integer.valueOf(request.getParameter(Constantes.IDSERVICO)));
//		if (!Utils.isBlank(request.getParameter(Constantes.DESCRICAO)))
//			servico.setDescricao(request.getParameter(Constantes.DESCRICAO));
//		
//		habilitacao.setServico(servico);
		
		return item;
	}
}